<?php
// Register
// Innehåller funktioner för registrering av användare.
class Register
{
	private $m_database = NULL;
	private $m_tablePrefix = NULL;

    public function __construct(DatabaseConnection $database)
    {
        $this->m_database = $database;
		$this->m_tablePrefix = $database->getTablePrefix();
    }
	
	// DoesUserExist - Kontrollerar så att användarnamnet inte redan finns.
	public function doesUserExist($username)
	{
	   $SqlStatement = "SELECT username FROM ".$this->m_tablePrefix."users WHERE username=?";

	   if ($stmt = $this->m_database->PrepareStatement($SqlStatement))
		{
		   // Binder inparametrarna.
		   $stmt->bind_param("s", $username);
	
		   // Kör SQL-frågan.
		   $stmt->execute();
	
		   // Binder resultatet.
		   $stmt->bind_result($username);
	
		   // Kontrollerar om användaren finns.
		   if ($stmt->fetch())
		   {
			   $stmt->close();
			   return true;
		   }
	   
		}
	   return false;
	}

	// createUser lägger till användaren till databasen.
	public function createUser($username, $password)
	{
		$sqlStatement = "INSERT INTO ".$this->m_tablePrefix."users (username, password, admin) VALUES  (?, ?, 'false')";
		
		if ($stmt = $this->m_database->PrepareStatement($sqlStatement))
		{
			$stmt->bind_param("ss", $username, $password);
	
			if ($stmt->execute())
			{
				$stmt->close();
				return true;	
			}
		}
		
		return false;			
	}
	
	// Remove user.
	public function removeUser($username)
	{
		$sqlStatement = "DELETE FROM ".$this->m_tablePrefix."users WHERE username=?";

		if ($stmt = $this->m_database->PrepareStatement($sqlStatement))
		{
			$stmt->bind_param("s", $username);
	
			$stmt->execute();
			
			if ($stmt->fetch())
			{
				$stmt->close();
				return true;
			}
		}
		
		return false;
	}
	
	// Remove userbyId.
	public function removeUserById($userId)
	{
		$sqlStatement = "DELETE FROM ".$this->m_tablePrefix."users WHERE uid=?";

		if ($stmt = $this->m_database->PrepareStatement($sqlStatement))
		{
			$stmt->bind_param("i", $userId);
	
			$stmt->execute();
			
			if ($stmt->fetch())
			{
				$stmt->close();
				return true;
			}
		}
		
		return false;
	}
	
	public function truncateUsersTable()
	{
		$query = "TRUNCATE TABLE test_users";
		
		if ($this->m_database->query($query) == true)
		{
			return true;
		}
		
		return false;
	}

	public function test()
	{
		// TruncateUsersTable
		if ($this->truncateUsersTable() == false)
		{
			echo "Register::truncateUsersTable kunde inte trunkera tabellen.";
			return false;
		}
		
		// om användarnamnet "Daniel" finns?
		if ($this->doesUserExist("Daniel") == true)
		{
			echo "Register::doesUserExist - Daniel finns men ska inte finnas.";
			return false;
		}

		// Radera en användare som inte finns.
		if ($this->removeUserById("30") == true)
		{
			echo "Register::removeUserById - Tog bort användaren men uid finns inte";
			return false;
		}
		
		// skapa en användare (Används i loginHandler också.)
		if ($this->createUser("testuser", sha1("test")) == false)
		{
			echo "Register::createUser - testuser kunde inte skapas";
			return false;
		}
		
		return true;
	}
}